export const handlers = []
/**
 * @func 函数节流
 * @param fn 需要节流的函数
 * @param delay 节流的时间间隔
 * @return 返回一个包含节流功能的函数
 */
export const throttle = (fn, delay) => {
    let canRun = true;
    return function (this, ...args) {
        if (!canRun) return;
        fn.apply(this, args);
        canRun = false;
        setTimeout(() => {
            canRun = true;
        }, delay);
    };
};


/**
 * @func 获取html标签相关信息
 * @return 返回包含id、class、innerTextde字符串的标签
 * @param target html节点
 */
export function htmlElementAsString(target) {
    const tagName = target.tagName.toLowerCase();
    if (tagName === 'body') {
        return '';
    }
    let classNames = target.classList.value;
    classNames = classNames !== '' ? ` class='${classNames}'` : '';
    const id = target.id ? ` id="${target.id}"` : '';
    const innerText = target.innerText;
    return `<${tagName}${id}${classNames !== '' ? classNames : ''}>${innerText}</${tagName}>`;
}

// 通知
export function notify(type, data) {
    if (handlers[type]) {
        // 获取对应事件的回调函数并执行，回调函数为addReplaceHandler事件中定义的事件
        handlers[type].forEach(callback => {
            try {
                callback(data);
            } catch (error) {
            }
        });
    }
}